package com.z.system.config;

import io.jsonwebtoken.security.Keys;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.crypto.SecretKey;
import java.nio.charset.StandardCharsets;

/**
 * JWT配置类，用于配置JWT相关的Bean
 * 使用HS256对称加密算法，适合多服务器环境（所有服务器使用相同密钥）
 */
@Configuration
public class JwtConfig {

    @Value("${jwt.secret}")
    private String jwtSecret;

    @Value("${jwt.expiration}")
    private long jwtExpiration;

    @Value("${jwt.issuer}")
    private String jwtIssuer;

    /**
     * 创建JWT密钥
     * 使用Keys.hmacShaKeyFor方法确保密钥符合JWT要求
     */
    @Bean
    public SecretKey jwtSecretKey() {
        // 确保密钥至少256位（32字节）
        // 如果密钥不够长，会自动填充或处理
        return Keys.hmacShaKeyFor(jwtSecret.getBytes(StandardCharsets.UTF_8));
    }

    /**
     * 获取JWT过期时间
     */
    public long getJwtExpiration() {
        return jwtExpiration;
    }

    /**
     * 获取JWT发行者
     */
    public String getJwtIssuer() {
        return jwtIssuer;
    }
}